"""
Python中实现并发编程的三种方式：
1. 多线程 ---> 因为CPython有GIL，无法使用到CPU的多核特性
2. 多进程 ---> 适合计算密集型任务
3. 异步编程 ---> 没有并行执行的代码，但是通过异步让多个子程序协作，提高CPU的利用率 ---> 协作式并发
    - async / await ---> 简化了协程的编写
"""
import asyncio


async def display(num):
    # await会让程序阻塞等待休眠结束，但是会让当前的子程序让出CPU
    await asyncio.sleep(1)
    print(num)


# 调用异步函数不会得到函数的返回值，得到的是协程对象
cos = [display(num) for num in range(1, 11)]
# 协程对象需要放到一个事件循环中才能达到相互协作的效果
# 通过asyncio模块的get_event_loop函数获取系统默认的事件循环
loop = asyncio.get_event_loop()
# 通过asyncio模块的wait函数将装协程的列表处理成一个Task对象
loop.run_until_complete(asyncio.wait(cos))
# 关闭事件循环
loop.close()
